package com.lighting.shortlink.project.config;

import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import java.util.ArrayList;

/**
 * 初始化限流配置
 * 实现了 InitializingBean 接口，可以在 bean 的初始化阶段进行配置限流规则
 * @author : lighting
 */
@Component
public class SentinelRuleConfig implements InitializingBean {
    @Override
    //   afterPropertiesSet 在Spring容器初始化Bean之后被调用
    public void afterPropertiesSet() throws Exception {
        ArrayList<FlowRule> rules = new ArrayList<>();//限流规则集合
        FlowRule createOrderRule = new FlowRule();// 自定义一个限流规则
        createOrderRule.setResource("create_short-link");// 指定规则针对的资源 create_short-link
        createOrderRule.setGrade(RuleConstant.FLOW_GRADE_QPS);//限流等级
        createOrderRule.setCount(1);//限流阈值为1
        rules.add(createOrderRule);//把自定义的限流规则添加到 限流规则集合
        FlowRuleManager.loadRules(rules);//把限流规则集合 加载到 sentinel 中去
    }
}
